#include <stdio.h>
#include <evalsoc.h>

#include "test_eclic.h"
//USER_DEFINED-多次中断
//timer 计算器倒置计时，TLC=25000000，中断周期1s
void timer_init_user_defined(uint32_t TIME_BASE) {  
    dw_timer_regs_t *ptmr = (dw_timer_regs_t *)TIME_BASE;

	ptmr->TCR = 0x0; // 停止定时器
    // 设置定时器加载计数值
    ptmr->TLC = 25000000; // 加载计数值
    // 配置定时器控制寄存器
    ptmr->TCR = 0x3; // 启动定时器  01 - enable timer.11 USER_DEFINED-多次中断 ,01 FREE_RUNNING-单次中断
	
}


//FREE_RUNNING-单次中断
void timer_init_free_running(uint32_t TIME_BASE) {  
    dw_timer_regs_t *ptmr = (dw_timer_regs_t *)TIME_BASE;

	ptmr->TCR = 0x0; // 停止定时器
    // 设置定时器加载计数值
    ptmr->TLC = 25000000; // 加载计数值
    // 配置定时器控制寄存器
    ptmr->TCR = 0x1; // 启动定时器  01 - enable timer.11 USER_DEFINED-多次中断 ,01 FREE_RUNNING-单次中断


}


//测试定时器

int timer_case1(){
    dw_timer_regs_t *ptmr = (dw_timer_regs_t *)TIMER0_BASE;

    ptmr->TCR = 0x0; // 停止定时器

    // 设置定时器加载计数值
    ptmr->TLC = 0x12345678; // 加载计数值

    /* Control 寄存器, 最低 3 bits 可读可写, 最低 bit-0 是 enable */
    ptmr->TCR = 6;
    
    /* 启动定时器, 检查定时器是否运行 7 - 111 USER_DEFINED-多次中断*/   
    ptmr->TCR = 7;


    /* ENABLE bit-0 定时器停止，定时器计数器和定时器时钟域的寄存器将会重置 */
    ptmr->TCR = 0;

    /* 启动定时器, 检查定时器是否运行 7 - 101 FREE_RUNNING-单次中断*/
    ptmr->TCR = 5;

    /**/
    ptmr->TCR = 0;

    printf("timer_case1 pass\n");

    return 0;

}
//FREE_RUNNING-单次中断
int timer_case2(){
    __enable_irq(); // enable all irq


	eclik_init();
	//ID=32 
	timer_init_free_running( TIMER0_BASE ); 

    volatile int wait = 0;
    int loop_count = 1000000; 
    while (wait < loop_count) {
        wait++;
    }

    printf("timer_case2 pass\n");

    return 0;

}
//USER_DEFINED-多次中断
int timer_case3(){
    __enable_irq(); // enable all irq


	eclik_init();
	//ID=32 
    timer_init_user_defined(TIMER3_BASE);

    return 0;

}

